jQuery(document).ready(function() {
jQuery('#syntab').tabs();
jQuery('.closeimg').live("click",function(e){e.preventDefault();jQuery('#mask, .window').hide();jQuery(this).parent().empty();});
    //jQuery('.cre').live('click',function(){var ht = jQuery(this);if(ht.html().indexOf('&nbsp;&nbsp;')>=0){ht.html('&nbsp;&bull;&nbsp;');}else{ht.html('&nbsp;&nbsp;');}});
    jQuery('.wl').live('click',function(){
        var wr = jQuery(this);
        var par = wr.parent();
        if(par.hasClass('err') || par.parent().parent().hasClass('err')){removeError(par.attr('id'));}
        if(wr.hasClass('selact')){
            wr.removeClass('selact');
        }else{
         jQuery('.selact').removeClass('selact');
            wr.addClass('selact');
        }
    });

    jQuery('.inz').click(function(){jQuery('#ale').removeAttr('checked');});
    jQuery('#ale').click(function(){jQuery('.inz').attr('checked',true);});
jQuery('.uniPanel').click(function(){
    var nid = jQuery(this).attr('id')
    if(nid=='contmen')nid="mainmenu";
    do_unipanel("t_" + nid)}
        );
    jQuery("#jsddm > li").bind("mouseover", jsddm_open);
       jQuery("#jsddm > li").bind("mouseout",  jsddm_timer);
do_unipanel('t_mainmenu');
  jQuery('.ra').click(function(){
      jQuery('.selitem').removeClass('selitem');
       jQuery(this).next('.cmp').addClass('selitem');

      if(jQuery(this).hasClass('el')){
          assign_category('0');
          var sli = jQuery('.selact').parent();

          if(sli.next('li').length>0){sli.next('li').find('.wl').click();}else{
      sli.parent().parent().next('.lmn').find('.wl').click();}
          
      }
jQuery('.el[value=-1]').attr('checked','checked');
      if(jQuery(this).hasClass('gr')){
          assign_category('1');
      jQuery('.gr[value=-1]').attr('checked','checked');
      }
  });

});

var closetimer = 0,timeout=500,ddmenuitem = 0;
function jsddm_open(){jsddm_canceltimer();jsddm_close();ddmenuitem = jQuery(this).find('ul').css('visibility', 'visible');}
function jsddm_close(){if(ddmenuitem) ddmenuitem.css('visibility', 'hidden');}
function jsddm_timer(){closetimer = window.setTimeout(jsddm_close, timeout);}
function jsddm_canceltimer(){if(closetimer){ window.clearTimeout(closetimer); closetimer = null;}}

function do_unipanel(panid) {
    panid = panid.substr(2);
    jQuery('#c_'+panid).attr('st')=='closed' ? jQuery('#c_'+panid).attr('st','opened'): jQuery('#c_'+panid).attr('st','closed');
    jQuery('#c_' + panid).slideToggle("slow");
}
function modialog(el,obar) {
    var obj,id,fun;
    // e.preventDefault();
    if(obar=='0'){obj = jQuery(el);id = obj.attr('sref');}else{id=obar.sref;}

var maskHeight = jQuery(document).height();
var maskWidth = jQuery(window).width();

jQuery('#mask').css({'width':maskWidth,'height':maskHeight}).fadeIn(600).fadeTo("slow",0.8);
var winH = jQuery(window).height();
var winW = jQuery(window).width();

 jQuery(id).css('top',  winH/2-jQuery(id).height()/2 +  (document.body.scrollTop || document.documentElement.scrollTop) + 'px');
 jQuery(id).css('left', winW/2-jQuery(id).width()/2);
 jQuery(id).fadeIn(1000);

 if(obar=='0'){fun = obj.attr('fun');}else{fun=obar.fun};
/*
    switch (fun) {
        case '0': add_lesson_branch('0',obar.pref);break;
         case '1': edit_row('0','-1'); break;
         //case '3':insert_new_file('1');break;
 }
 */
}

function insert_new_sentence(mod){
switch (mod){
    case '0':
    var rowinf='';
    rowinf += '<textarea id="txsent" style="width:300px;height:220px;"></textarea>';

    rowinf += '<button onclick="javascript:insert_new_sentence(\'1\')">Сохранить</button>';
    rowinf += '<div id="close_modial" class="close closeimg"> </div>';
    jQuery('#modial').css({'width':'320px','height':'245px', 'border':'0'}).append(rowinf);

    var ob = {sref:'#modial'};
    modialog('0',ob);
break;

case '1':
      var sentarr,sent,datastr,sentobj,so1,so2,bradr,liadr,prx,arr,ul,nd,matches;
        jQuery('#sentence').empty();
    sent = jQuery('#txsent').val();
         //sentarr = sent.split(/([a-zA-Za-яA-Я\-;,']+)/);
       // sentarr = sent.split(/([a-zA-Z\d][a-яA-Я\d-]*/g);
       //[15:10:36] uniplace: var srt='asd sad  asd sada ... asdsa ';
//var matches = srt.match(/[a-z]+/ig);
        //var matches = srt.match(/\w+/ig);
        //matches = sent.match(/\w[]+/ig);
        ///[\w\',;\"]+/i
        //matches = sent.match(/[a-z',;?!\-]+/ig);
        sentarr = sent.match(/[\w\',;\"\-?!]+/ig);
//alert(matches);

      sentobj = {"i":"0","cls":"","ind":"-1"};
      sentobj["children"] = [];
               bradr= '0c0';
        var senlen = sentarr.length;

    for (var i=0;i<senlen;i++){
        if(sentarr[i] !== " " && sentarr[i] !==""){
                         liadr = bradr + 'c0';

                  so1 = {"i": bradr,"cls":"bor2"};  //формируем li первого порядка
                  so2 = {"i":liadr,"cls":"bor1","text":'<br>' + sentarr[i]};
                  so1["children"]=[];
                  so1["children"][0] = so2;
                 sentobj["children"][i] = so1;

            var na = parseInt(bradr.substr(2)) + 1;
                  bradr = '0c' + na;
            }
        }


  arr = [sentobj]; //помещаем получившийся объект в массив
    prx='k';

   ul = jQuery('<ul id ="' + prx + 'u-1" class="umn"></ul>');
  ul = buildSentence(arr,ul,prx);
  jQuery('#sentence').append(ul);

        datastr = make_save('ku0');
     
     datastr = '<div>[{"i":"0","cls":"","type":"0","children":['  + datastr.substr(0,datastr.length-1) + "]}]</div>";

    jQuery('#datadiv').append(datastr)

     nd = jQuery('#datadiv').children('div').length-1;
     jQuery('#sentence').attr('ind',nd);
     jQuery('.closeimg').click();
break;
}
}
function load_from_file(mod){

     var ht='';
    switch (mod){
     case '0':
 //if(confirm('Вы сохранили свою работу? Продолжить загрузку?')){
ht+=  '<span>Введите имя файла</span><br>';
ht+=  '<input id="filenam" type="text" style="width:170px;" value="prov_page.html"><br><br>';
ht += '<button onclick="javascript:load_from_file(\'1\');">Загрузить файл</button>';
ht += '<div id="close_modial" class="close closeimg"> </div>';
jQuery('#modial').css({'width':'180px','height':'8' +
                                                '0px', 'border':'0'}).append(ht);
var ob = {sref:'#modial'};
modialog('0',ob);
   // }
    break;

    case '1':
  var file;
     if(jQuery('#filenam').val().length>0){
     jQuery('#datadiv').empty();
     jQuery('#navdiv').empty();
     file = 'vklad/' + jQuery('#filenam').val();
     jQuery('.closeimg').click();
        /*jQuery.ajax({url:file,type:"GET",dataType:"html",success: function(ht) {alert(ht);});
         */

     jQuery('#load_iframe').attr('src',file);
      jQuery("#sentence").attr("ind",'0');
    var iframe = jQuery('#load_iframe')[0];
         //дожидаемся окончания загрузки ифрейма
    if (navigator.userAgent.indexOf("MSIE") > -1 && !window.opera){
    iframe.onreadystatechange = function(){if (iframe.readyState == "complete"){load_data();}};
     } else {iframe.onload = function(){load_data();}};

     }else{
             alert('нужно указать имя файла');
         }

    break;
    }
}

//дополнительная функция к функции load_from_file
function load_data(){
      var ifr = jQuery('#load_iframe').contents(),ht,nav='';
     ifr.find('div').each(function(i){
         crs = jQuery(this).html();
     ht = '<div>' + crs + '</div>';
     jQuery('#datadiv').append(ht);
         nav = '<span class="wl" onclick="get_sentence(\'' + i + '\')">&nbsp;&nbsp;' + (i+1)+ '</span>';
    jQuery('#navdiv').append(nav);
                   });

    jQuery('#load_iframe').contents().find('body').empty();
     get_sentence('0');
}


function select_sent(){
    var ht='';

    ht += '<button onclick="javascript:load_sent_from_base();">Загрузить</button>';
      ht+='<select id="selrang">';
    for(var m=1; m<100;m++){
    ht+='<option value="' + m*10 + '">' + m*10 + '</option>';
     }

    ht+='</select>';
    ht += '<div id="sensel">' +
          '<table id="tabsel"><tbody id="tb_tabsel"></tbody></table></div>';
    ht += '<button onclick="javascript:jQuery(\'.closeimg\').click();">Закрыть</button>';
    ht += '<div id="close_modial" class="close closeimg"> </div>';
    jQuery('#modial').css({'width':'320px','height':'345px', 'border':'0','overflow':'auto'}).append(ht);
var ob = {sref:'#modial'};
    modialog('0',ob);

}
function load_sent_from_base(){
    var sent,disp='',rang,obj;
    rang = jQuery('#selrang').val();
    jQuery('.closeimg').click();
jQuery.ajax({
    url:base_url +'/?aj=1&plg=ling&op=selsnt',
            type:'GET',
            data:{rang:rang},
            success:function(resp){
             sent = eval(resp)
             //disp += '<tr><td>' + sent[i]["sent"]["text"].substr(0,300) + '</td></tr>';
              //  jQuery('#tb_tabsel').empty().append(disp);
                jQuery('#datadiv').empty();
            for(var i=0;i<sent.length;i++){
                jQuery('#datadiv').append('<div>'+ sent[i]['sent']+ '</div>')
            }
            jQuery('#sentence').empty();
            get_sentence('0');
            }
    });
}
function make_sent(){
   var ua,dat,arr,prx,ul,typ,resparr,ind;
    typ = jQuery('#seltyp').val();
    jQuery.ajax({
         url:base_url +'/?aj=1&plg=ling&op=gsnt',
        type:'GET',
        data:{type:typ},
         success:function(resp){
         jQuery('#sentence').empty();
         resparr = resp.split('###');
        ind = resparr[0];
        dat = resparr[1];
       prx='k';
       arr = eval(dat);
   ul = jQuery('<ul id ="' + prx + 'u-1" class="umn"></ul>');
  ul = buildSentence(arr,ul,prx);
  jQuery('#sentence').append(ul);
       }

});


        }
function get_sentence(mod){
    var num,arrow,arr,hid,prx,ul,datdiv;
   if(jQuery('#ku-1').length>0){
         if(mod.indexOf('n')!=-1 || mod.indexOf('p')!=-1){
            if(mod=='n')num = parseInt(jQuery('#sentence').attr('ind'))+1;
            if(mod=='p')num = parseInt(jQuery('#sentence').attr('ind'))-1;
         }else{
            num=parseInt(mod);
        }

    }else{
        num=0;
    }
    jQuery('.numsel').removeClass('numsel');
    jQuery('#navdiv').children('span').eq(num).addClass('numsel');
    if(jQuery('#swbut').attr('sw')=='1'){check_switcher();}

    datdiv = jQuery('#datadiv').children('div');
    if(num < datdiv.length && num >= 0){
        if(jQuery('#ku0').length>0)
   put_down_sentence();
    jQuery('#sentence').empty();
    arrow = datdiv.eq(num).html();
    arr = eval(arrow);
    prx = 'k';
        if(hid=='0'){
        ul = jQuery('<ul id ="ku-1" class="umn"></ul>');
     ul = buildSentence(arr,ul,prx);
      jQuery('#sentence').attr('ind',num);
        jQuery('#sentence').append(ul);
        }else{

        ul = jQuery('<ul id ="ku-1" class="umn"><li id="ke0"></li></ul>');
          jQuery('#sentence').append(ul);
           ul = jQuery('<ul id="ku0"></ul>');
        ul = buildExercise(arr,ul,prx);
          jQuery('#ke0').append(ul);

       adres_restore();
        }
   jQuery('#sentence').attr('ind',num);
        if(!arr[0]['type']){jQuery('#sentence').attr('hid','0');
        }else{hid = jQuery('#sentence').attr('hid');}

      /*
        if(hid!='0'){
          remove_Classes(hid);
      }
        */

    }else{
        alert("Больше нет предложений");
    }

}





function buildSentence(ar,ul,prf){
   var adr,txt,trobj,lis,clstr='',clsar=[];

    for (var k = 0; k < ar.length; k++){
   trobj = ar[k];
       if(trobj){
           if(trobj["text"]!=="" || trobj["text"]!==" "){
   lis = jQuery('<li class="lmn"></li>');//создаем узел‚ li
   for (var trkey in trobj) {
       if(trobj['cls']){
       clstr = trobj['cls'];
       clsar.length=0;

       if(clstr.length>0){lis.attr('rclas',clstr); clsar = clstr.split('%');}

       }

   switch (trkey){
   case "children":
               if(trobj['children']!==null){
               //<img class="cb" src="http://webuniver/wp-content/plugins/lingvo/style/images/upel_img/cube.png">
                   var newUl = jQuery('<ul id="' + prf + 'u' + trobj['i'] + '" class="umn"></ul>');
           buildSentence(trobj[trkey],newUl,prf);
           lis.append(newUl);
               }
    break;

    case "i": lis.attr('id', prf + 'e' + trobj[trkey]); break;
    case "inst":
            if(trobj['inst'].length>0)jQuery('#instruk').html(trobj['inst']);
   break;
   case "ind":lis.attr('ind',trobj[trkey]);break;
   case "achk":lis.attr('achk',trobj['achk']);break;

  case "cls"://добавляем классы предварительно разбив строку на составляющие имена классов
           //alert(clsar.length + "  clsar.length")

                if(clsar.length>0){
                for(var t=0;t<clsar.length;t++){
                    if(clsar[t].length>0){
                    //if(clsar[t].indexOf('2')>0)lis.addClass(clsar[t]);
                    lis.addClass(clsar[t]);
                    }
                 }
                }
       
      break;

      case "type":
             tp = trobj['type'];
             jQuery('#sentence').attr('hid',tp);
      break;

      case "text":
           adr = trobj['i'];
           txt = trobj['text'];
        lis.append('<span id="sp' + adr + '" class="wl">' + txt + '</span>&nbsp;');
          if(clsar.length>0){
          for(var q=0;q<clsar.length;q++){
               if(clsar[q].length>0){
                    if(clsar[q].indexOf('1')>0)lis.addClass(clsar[q]);
                 //find('.wl').
                    }
                }
          }
       break;

      }
   }

   ul.append(lis);
       }
    }
  }

 return ul;
   }

function buildExercise(ar,ul,prf){
    var elis,trobj,ne_arr,ne_ul,adr,txt,chad,nn;

    for (var p = 0; p < ar.length; p++){
    trobj = ar[p];
        if(trobj){
              
   elis = jQuery('<li id="ke'+ trobj['i'] + '"  class="lmn bor2"></li>');//создаем узел‚ li


                  for (var trkey in trobj) {
      switch (trkey){
          case "children":
                  //если у  этого узла есть дети
              ne_arr = trobj['children'];
                //ne_ul  = jQuery('<ul id="ku0" class="umn"></ul>')
                ne_ul == buildExercise(ne_arr,ul,prf);
               //elis.append(ne_ul);

          break;

      case "text":
           adr = trobj['i'];
           txt = trobj['text'];
        elis.append('<ul id="ku'+adr+'" class="umn"><li id="ke'+adr+'c0" class="lmn bor1" achk="' +trobj['achk'] + '"><span id="sp' + adr + 'c0" class="wl">' + txt + '</span></li></ul>&nbsp;');
        //elis.append('<span id="sp' + trobj['i'] + 'c0" class="wl">' + txt + '</span>');
              //achk="'+trobj['achk']+'"

          break;
  //case "achk":elis.attr('achk',trobj['achk']);break;
        }
      }
        if(elis.html().length>0)ul.append(elis);
        }
  }
    return ul;
 }
//функция восстанавливает последовательные адреса узлов предложения после вставления-удаления узлов
function adres_restore(){
    var oldid,newid,childid,curli,curchildli;
      jQuery('#ku0').children('li').each(function(i){ //после удаления узла переименовываем адреса его сиблингов
                                    //берем все узлы первого порядка
                         curli = jQuery(this);
                    oldid = curli.attr('id').substr(2);
                     newid = '0c' + i;   //формируем для него новый адрес
                      if(oldid!=newid){ //если узел находится после выбранного принимающего узла
                          //это мы делаем для того, чтобы бессмысленно не менять адреса у предыдущих узлов

                         if(curli.children('ul').length>0){ //если у текущего узла есть дети
                                      curli.children('ul').children('li').each(function(m){  //начинаем второй цикл, по переименованию адресов детей
                                              curchildli = jQuery(this);
                                    childid = curchildli.attr('id','ke' + newid+'c'+m); //переименовываем адреса детей текущего узла
                                    curchildli.find('.wl').attr('id','sp'+ newid+'c'+m); //меняем адрес у спана
                                  });
                                }
                        curli.children('ul').attr('id', 'ku' + newid);//меняем адрес у ul
                        curli.attr('id','ke' + newid); //и наконец переименовываем текущий узел
                }
                });
    }
function assign_category(mod){
    var gru,selw,selul,parli,ob=[],elmtyp;
  selw = jQuery('.selact').parent();//ли выбранного слова
    if(selw.length>0){

        switch (mod){

        case '0':
           elmtyp = jQuery("input[name='elm']:checked").val();
         ob['tp']='1';
         ob['id']=selw.attr('id');
           rem_cat_class(ob);

            switch (elmtyp){
               case '0':
                   ob['tp']='1'; ob['id']=selw.attr('id');
                    rem_cat_class(ob);break;
                case '1':selw.addClass('non');break;
                case '2':selw.addClass('apr');break;
                case '3':selw.addClass('predl');break;
                case '7':selw.addClass('nar');break;
                case '9':selw.addClass('ger');break;
                case '10':selw.addClass('glg');break;
                case '12':selw.addClass('ppr');break;
                case '13':selw.addClass('msm');break;
                case '14':selw.addClass('art');break;
                case '15':selw.addClass('part');break;
                case '16':selw.addClass('sou');break;
                case '17':selw.addClass('ol');break;
                case '18':selw.addClass('pril');break;
                case '20':selw.addClass('inf');break;
                case '23':selw.addClass('or');break;
              }


        break;

    case '1':
            selul = selw.parent(); //это ul в котором содержится выбранный li
            parli = selul.parent(); //это ли первого уровня
        gru = jQuery("input[name='gru']:checked").val();
         ob['tp']='2';
         ob['id'] = parli.attr('id');

        rem_cat_class(ob);

        switch (gru){
                  case'0':
                   ob['tp']='2'; ob['id']=selw.parent().parent().attr('id');break;
                  case '4':parli.addClass('pao');break;
                  case '5':parli.addClass('ppo');break;
                  case '6':parli.addClass('gro');break;
                  case '8':parli.addClass('dp');break;
                  case '11':parli.addClass('glgrp');break;
                  case '19':parli.addClass('nongr');break;
                  case '21':parli.addClass('info');break;
                  case '22':parli.addClass('ob');break;  
        }


       break;
        }
    }else{
        alert("выберите слово в групе, которую вы хотите определить");
    }


}
function rem_cat_class(ob){
    var block,typ,clar;
    typ = ob['tp'];
    block = jQuery('#' + ob['id']); //это li группы или элемента

    if(typ == '1')clar = ['non','apr','predl','nar','ger','glg','ppr','msm','art','part','sou','nongr','ol','pril','or','inf'];
    if(typ == '2')clar = ['pao','ppo','gro','dp','glgrp','nongr','ob','info'];

                   

            for(var i = 0;i<clar.length;i++){
    if(block.hasClass(clar[i]))block.removeClass(clar[i]);
            }
        }

/*
function remove_category_class(mod){
    var selw,ob=[];
    selw = jQuery('.selact').parent();//ли выбранного слова
    switch (mod){
    case "0":
        ob['tp']='1'; ob['id']=selw.attr('id');

    break;
        case "1":
                ob['tp']='2'; ob['id']=selw.parent().parent().attr('id');
        break;

    }
    rem_cat_class(ob);
}
  */

function join_word(){
    var selw = jQuery('.selact'),newad='',inchil,curr,txs,seli,ob=[];
       if(selw.length>0){
        var selul = selw.parent().parent(); //это ul в котором содержится выбранный li
                                            // и куда нужно присоединить новый элемент
       seli = parseInt(selul.attr('id').substr(4));//это последняя часть адреса принимаюещего узла первого порядка
       //мы просто берем следующий ul и засовываем его содержимое в выбранный ul а опустошенных ul уничтожаем
       var insel = selul.parent().next('li').children('ul'); //этот узел, который нужно переместить
       var  perm = selul.attr('id').substr(2); //постоянная часть адреса
       var dyn  = selul.children('li').length; //число детей у узла куда мы добавляем новых детей из перемещаемого узла
        /*
       if(dyn>1){
       selul.children('li:last-child').find('.wl').removeClass('bor1').removeClass('blf1').removeClass('brt1').addClass('bob1');
       }else if(dyn==1){
         selul.children('li').find('.wl').removeClass('bor1').addClass('brt1');
       }
       */
       inchil = insel.children('li').length;
           //alert(insel.attr('id') + "  откуда берем");
       insel.children('li').each(function(k){//берем всех детей у переносимого узла и перебираем в цикле
               newad = 'ke' + perm + 'c' + dyn; //формируем новый адрес для перенорсимого узла первого уровня
                curr = jQuery(this);
           txs = curr.find('.wl');
           txs.attr('id','sp'+perm+'c' + dyn);
           if(!curr.hasClass('prs'))curr.addClass('prs');
           //alert(curr.attr('id') + "  " + curr.hasClass('prs'))
           /*
           if(k==0 && inchil==1){
             if(txs.hasClass('bor1'))txs.removeClass('bor1');if(txs.hasClass('bob1'))txs.removeClass('bob1');if(txs.hasClass('brt1'))txs.removeClass('brt1');if(!txs.hasClass('blf1'))txs.addClass('blf1');
           }else if(k==0 && inchil>1){
               if(txs.hasClass('bor1'))txs.removeClass('bor1');if(txs.hasClass('blf1'))txs.removeClass('blf1');if(txs.hasClass('brt1'))txs.removeClass('brt1');if(!txs.hasClass('bob1'))txs.addClass('bob1');
           }else if(k>0 && k<inchil-1 && inchil>1){
               if(txs.hasClass('bor1'))txs.removeClass('bor1');if(txs.hasClass('blf1'))txs.removeClass('blf1');if(txs.hasClass('brt1'))txs.removeClass('brt1');if(!txs.hasClass('bob1'))txs.addClass('bob1');
           }else if(k == inchil-1 && k>inchil>1){
               if(txs.hasClass('bor1'))txs.removeClass('bor1');if(txs.hasClass('bob1'))txs.removeClass('bob1');if(txs.hasClass('brt1'))txs.removeClass('brt1');if(!txs.hasClass('blf1'))txs.addClass('blf1');
           }
           */
           curr.attr('id',newad); //меняем адрес у текущего переносимого ребенка
                         dyn++;
           curr.clone().appendTo(selul); //копируем ребенка и переносим его в выбранный узел
          });
       insel.parent().remove();//после переноса всех детей удаляем весь узел первого порядка.
            adres_restore();
               ob["id"]=selul.attr('id'); ob["lm"]='0';
           classes_restore(ob);
           ob["id"]="ku0"; ob["lm"]='0';
           classes_restore(ob);
       }else{
           alert("Нужно выбрать слово к которому будет присоединено слово справа")
       }

}
function separate_word(){
    var selw,selul,ind,parli,chlen,col,nli,rig,word,ob=[];

        selw = jQuery('.selact').parent();//ли выбранного слова
        selul = selw.parent(); //это ul в котором содержится выбранный li
        //теперь нужно из этого ула достать слово и сделать для него отдельный первого уровня li + ul. А а из того что
        //что после слова тоже сделать отдельный li + ul.
         col = selul.children('li'); //коллекция узлов которые содержатся в этом общем уле
         chlen = col.length; //число слов в выбранном уле

        if(chlen > 1){ //если в выбранном узле больше одного слова
        ind = col.index(selw);       //выясняем индекс выбранного слова среди этих детей

            col.each(function(i){ //перебираем детей ула в цикле
            //word = jQuery(this).children('span'); //это спан в котором содержится слово
           word = jQuery(this);   //текущий li
                   //выясняем есть ли правый сосед
                if((ind+1)<=(chlen-1)){rig = col.eq(ind+1);}else if(ind==(chlen-1)){rig='0';}

                    if(i == ind){ //если это li выбранного слова

                        parli =  selul.parent();//li первого порядка(на уровне следующем после корня)
                        if(ind>0){//если это не первый ребенок
                   //создаем для него ли с улом   на первом уровне после родительского ли первого уровня
                    parli.after('<li id="ke0cab'+ ind +'cd" class="lmn bor2"><ul id="ku0cab'+ ind +'cd"  class="umn"></ul></li>');
                            if(word.hasClass('prs'))word.removeClass('prs'); //отсоединяем текущий ли
                    if(rig!=0){if(rig.hasClass('prs'))rig.removeClass('prs');}//если есть правый сосед и он присоединен - отсоединяем

                  //jQuery(this).clone().appendTo(jQuery('#ku0cab'+ ind + 'cd')); //клонируем слово во вновь созданный ул
               word.clone().appendTo(jQuery('#ku0cab'+ ind + 'cd')); //клонируем слово во вновь созданный ул
               //jQuery(this).addClass('fordelete');//присваиваем класс для будущего удаления
                 word.addClass('fordelete');//присваиваем класс для будущего удаления
                        }

                    }
                        if(ind<(chlen-1)){//если есть дети стоящие после выбранного слова
                          //создаем для них отдельный ул

                    if(ind==0){nli= jQuery('#' + parli.attr('id')); //если выбрано самое первое слово в уле то точка отсчета - выбранный ул первого порядка
                    }else{nli = jQuery('#ke0cab'+ ind + 'cd');} //если выбрано не первое слово то точкой отсчета будет вновь созданный ул для выбранного слова
                    //создаем новый ли с улом
                    nli.after('<li id="ke0cab'+ (ind+1) + 'cd" class="lmn bor2"><ul id="ku0cab'+ (ind+1) +'cd"  class="umn"></ul></li>');

                            if(i > ind){//если это дети стоящие после выбранного слова


if(i!=(ind+1)){//если текущий узел это не правый сосед
    if(!word.hasClass('prs'))jQuery(this).addClass('prs');}
}

                    jQuery(this).clone().appendTo(jQuery('#ku0cab'+ (ind+1) + 'cd'));
                    jQuery(this).addClass('fordelete');


                    }
           });
            jQuery('.fordelete').remove();//удаляем склонированных детей



                  ob['id'] = selul.attr('id');ob['lm']='0';
                classes_restore(ob);


            if(jQuery('#ku0cab'+ ind +'cd').length>0){

                  ob['id'] = 'ku0cab'+ ind +'cd';ob['lm']='0';
                classes_restore(ob);
              }
            if(jQuery('#ku0cab'+ (ind+1) +'cd').length>0){

                ob['id'] = 'ku0cab'+ (ind+1) +'cd';ob['lm']='0';
                classes_restore(ob);
              }


                ob['id'] = 'ku0';ob['lm']='0';
                classes_restore(ob);


                 adres_restore();

            }else{
         //alert("Это слово ни с чем не объединено");
        }

}

function join_group(){
     var blk,ind,ges,pb=[],clar,ob=[],cls='';
    //clar = ['pao','ppo','gro','dp','glgrp'];
     blk = jQuery('.selact').parent().parent().parent(); //это блок первого уровня
     ind = jQuery('#ku0').children('li').index(blk);  //индекс данного блока в дереве предложения
       jQuery('#ku0').children('li:gt('+ ind + ')').each(function(){ //перебор элементов следующих после выбранного блока
           ges = jQuery(this);
           if(!ges.hasClass('prs')){

               /*for(var i=0;i<clar.lenfth;i++){
                   if(blk.hasClass(clar[i]))cls = clar[i];
               }
               if(cls.length>0){
               ob['tp'] = '2';ob['id']=ges.attr('id');
               rem_cat_class(ob);
               ges.addClass(cls);
            }
               */
          ges.addClass('prs');return false;
               }

           });
       pb['id']='ku0'; pb['lm'] = '0';
    classes_restore(pb);
}
function separate_group(){
var blk,ind,obch,rig,len,pb=[],ob=[];
    blk = jQuery('.selact').parent().parent().parent(); //выбранный li первого уровня
    if(blk.length>0){obch = jQuery('#ku0').children('li');} // коллекция всех узлов дерева
    len = obch.length;         //число узлов в дереве
    ind = obch.index(blk);//индекс выбранного li
    //выясняем есть ли соседи справа
    if((ind+1)<=(len-1)){rig = obch.eq(ind+1);}else if(ind==(len-1)){rig='0';}
    if(blk.hasClass('prs')){  //если выбранный блок присоединен к левому соседу
        blk.removeClass('prs'); //удаляем класс присоединения
        /*
        ob['tp'] = '2';ob['id']=blk.attr('id');
        rem_cat_class(ob);
    */
    }
    //если есть правый сосед и правый сосед присоединен к выбранному блоку -
    // удаляем у правого соседа класс присоединения
    if(rig!='0'){if(rig.hasClass('prs')){rig.removeClass('prs');}}
    pb['id']='ku0'; pb['lm'] = '0';
    classes_restore(pb);

}
function classes_restore(tp){
    var lim,cur,col,cpid,tip,lef,rig,len,clas,lev,obj=[];
    cpid = tp['id']; lim = tp['lm']; //извлекаем значения из пришедшего объекта
    if(cpid=='ku0'){lev='2';}else{lev='1';} //выясняем на каком уровне нужно делать изменения
                   //в зависимости от значения lim создаем коллекцию изменяемых узлов
    if(lim=='0'){
    col = jQuery('#'+cpid).children('li');
    }else{        //все узлы после узла с индексом lim
     col = jQuery('#'+cpid).children('li:gt(' + lim + ')');
    }

    len = col.length;
    col.each(function(t){ //обходим созданную коллекцию узлов
      cur = jQuery(this);
      if(t>0){lef = col.eq(t-1);}else if(t==0){lef='0';} //находим левого соседа
      if(t<(len-1)){rig = col.eq(t+1);}else if(t==(len-1)){rig='0';} //находим правого соседа
      if(cur.hasClass('prs')){tip=1;}else{tip=2;} //выясняем объединен ли текущий узел или нет

        if(rig!='0'){        //если есть правый сосед
             if(rig.hasClass('prs')){       //если правый сосед уже присоединен
         //если текущий узел является присоединеным - назначаем класс без боковых границ
                 if(tip==1){clas = 'bob';obj[0]='brt';obj[1]='blf';obj[2]='bor';}
   //если текущий узел не присоединен - назначаем класс без правой границы
                 if(tip==2){clas = 'brt';obj[0]='bob';obj[1]='blf';obj[2]='bor';}
             }else{     //если правый сосед не присоединен
     //если текущий узел является присоединеным - назначаем класс без левой границы
             if(tip==1){clas = 'blf';obj[0]='brt';obj[1]='brt';obj[2]='bor';}
      //если текущий узел не присоединен - назначаем класс со всеми границами
                 if(tip==2){clas = 'bor';obj[0]='brt';obj[1]='blf';obj[2]='bob';}
             }
        }else{//если правого соседа нет
            //если текущий узел присоединен = назначаем класс без левой границы
            if(tip==1){clas = 'blf';obj[0]='brt';obj[1]='bob';obj[2]='bor';}
            //если текущий узел не присоединен назначаем класс со всеми границами
            if(tip==2){clas = 'bor';obj[0]='brt';obj[1]='blf';obj[2]='bob';}
        }
            //убираем бывшие классы, добавляем назначенный
 for (var n=0; n< obj.length;n++){
         if(cur.hasClass(obj[n]+lev))cur.removeClass(obj[n]+lev);
      }
         if(!cur.hasClass(clas+lev))cur.addClass(clas+lev);

       });
}

function put_down_sentence(){
    var senad,tp,savestr,num,datdiv;
        senad = 'ku0';
        savestr = make_save(senad);
              tp=jQuery("#sentence").attr('hid');
    savestr = '[{"i":"0","cls":"","type":"' + tp + '","children":['  + savestr.substr(0,savestr.length-1) + "]}]";
         
    num = parseInt(jQuery('#sentence').attr('ind'));
    datdiv = jQuery('#datadiv').children('div');
    datdiv.eq(num).html(savestr);

    //alert('Результаты работы записаны');
   }
function save_text(mod){
  var savetxt;
    savetxt = jQuery('#datadiv').html();
   //jQuery('#savdiv').html(savetxt);
//.css('display','block');
    
    switch (mod){
      case '1': //если сохранение в файл
    var wind,svdt;
    //svdt = jQuery('#savdiv').html();

    wind = window.open('vklad/only_for_saving.html','newwin');

          


    break;

    case '2':  //если сохранение в базу
             var fulltxt = [],obj,ind;
            jQuery('#datadiv').children('div').each(function(){
                obj = jQuery(this).html();
               fulltxt.push(obj);
            });
            savetxt = fulltxt.toString();
            //alert(savetxt);
                ind = jQuery('#ku-1').attr('ind');
        jQuery.ajax({
                url: base_url + '/?aj=1&plg=ling&op=satex',
                type: "POST",
                 data:{stroka:savetxt,tid:ind},
                success:function(response) {
                       alert(response);
                  }
            });
            

    break;
    }
    }
function class_array(mod){
    var clsr;
  switch (mod){
    case 'both':
     clsr =  ['bor1','bob1','brt1','blf1','bor2','bob2','brt2','blf2'];
     break;

    case 'first':
     clsr =  ['bor1','bob1','brt1','blf1'];
     break;

    case 'second':
     clsr =  ['bor2','bob2','brt2','blf2'];
     break;

  case '0':
      clsr = ['non','apr',
              'predl','nar','ger','glg','ppr','msm','art','part','sou','nongr','ol','pril',
              'pao','ppo','gro','dp','glgrp','inf','info','or','ob','bor1','bob1','brt1','blf1','bor2','bob2','brt2','blf2'];

  break;

    case '1':
    clsr = ['non','apr',
        'predl','nar','ger','glg','ppr','msm','art','part','sou','nongr','ol','pril',
        'pao','ppo','gro','dp','glgrp','inf','info','or','ob','bor1','bob1','brt1','blf1','bor2','bob2','brt2','blf2'];
    break;

    case '2':
    clsr = ['non','apr','predl','nar','ger','glg','ppr','msm','art','part','sou','ol','pril',
        'inf','or'];
    break;

    case '3':
    clsr = ['nongr','pao','ppo','gro','dp','glgrp','info','ob'];
    break;

    }
return clsr;
}
function make_save(adr){
    var neadr,output='',hid,curli,chil,curid,clstr='';
            hid = jQuery('#sentence').attr('hid');
    
    var clsar = class_array(hid);

    jQuery('#'+adr).children('li').each(function(){
             curli = jQuery(this);
             curid =  curli.attr('id');
        output += '{"i":"' + curid.substr(2);
        if(curli.children('.wl').length>0){
            output += '","text":"' + curli.children('.wl').html();
        }
              //if(curid.lastIndexOf('c')==3)prf=2;
              //if(curid.lastIndexOf('c')>4)prf=1;

        for(var i=0; i<clsar.length;i++){
            if(curli.hasClass(clsar[i]))clstr += '%' + clsar[i];
        }
        if(clstr.length>0){clstr = clstr.substr(1);output += '","cls":"'+clstr; clstr = '';}

      if(curli.children('ul').length>0){
        output += '","children":[';
          neadr = curli.children('ul').attr('id');//eq(0)
          //alert(neadr)
          chil = make_save(neadr);
        if (chil !== undefined){
        chil = chil.substr(0,chil.length-1);
        output += chil + ']},';
            }
      }else{
             output += '"},';
      }

    });
return output;
}

 /*
function remove_Classes(mod){

    var clasar = class_array(mod),parli,worli,atrar=[],atrstr,worliatrstr,woratr;
    atrar[0]='';atrar[1]='';


    jQuery('#ku0').children('li').each(function(){ //коллекция всех узлов предложения
     parli = jQuery(this);                         //узел первого порядка

        for (var m=0; m<clasar.length;m++){         //цикл перебора классов

        if(parli.hasClass(clasar[m])){
            parli.removeClass(clasar[m]);   //удаление классов у узла первого порядка
            //готовим запись удляемых классов в атрибут
            if(clasar[m].indexOf('2')!=-1){atrar[0]=clasar[m];}else{atrar[1]=clasar[m];}
        }

          parli.children('ul').children('li').each(function(){      //коллекция дочерних узлов узла parli
          worli = jQuery(this);                                     //перебираем коллекцию

              if(worli.hasClass(clasar[m])){
                  worli.removeClass(clasar[m]); //удаляем классы у дочерних узлов
                  woratr = worli.attr('rclas'); //получаем строку аттрибута

            if(clasar[m].indexOf('1')!=-1){//если это класс границы, записываем его на первое место
                               //выясняем состояние строки аттрибута
            if(woratr.length==0){
                worliatrstr = clasar[m];
                         //на второе место ставим состояние класса присоединения
                 if(worli.hasClass('prs')){worliatrstr = worliatrstr + '%' + '1';}else{worliatrstr = worliatrstr + '%' + '0';}
            }else{
                //если строка уже есть, значит класс присоединения уже записан
                worliatrstr = clasar[m]+ woratr;
            }

            }else{//если это класс компонента, записываем его на третье место,
          if(woratr.length==0){
            if(worli.hasClass('prs')){worliatrstr = worliatrstr + '%' + '1';}else{worliatrstr = worliatrstr + '%' + '0';}
        worliatrstr = '%' + clasar[m];
        }else{
            //если строка уже есть, значит класс присоединения уже записан
            worliatrstr = woratr + clasar[m];}

            }
                  //удаляем класс присоединения, если он есть
           if(worli.hasClass('prs'))worli.removeClass('prs');
               //записываем новую строку в атрибут
           worli.attr('rclas',worliatrstr);
              }


          });
        }
            //записываем удаляемые классы в атрибут для узла первого уровня
        atrstr = atrar[0];
        if(parli.hasClass('prs')){atrstr = atrstr + '%' + '1';}else{atrstr = atrstr + '%' + '0';}
        atrstr += '%' + atrar[1];
        if(parli.hasClass('prs'))parli.removeClass('prs');
        parli.attr('rclas',atrstr);
           atrar[0]='';atrar[1]='';

    });
}
*/

function remove_Classes(mod){

    var clasar = class_array(mod),parli,worli,atrar=[],atrstr,worliatrstr,woratr;
    atrar[0]='';atrar[1]='';


    jQuery('#ku0').children('li').each(function(){ //коллекция всех узлов предложения
     parli = jQuery(this);                         //узел первого порядка

        for (var m=0; m<clasar.length;m++){         //цикл перебора классов

        if(parli.hasClass(clasar[m])){
            parli.removeClass(clasar[m]);   //удаление классов у узла первого порядка
            //готовим запись удляемых классов в атрибут
            if(clasar[m].indexOf('2')!=-1){atrar[0]=clasar[m];}else{atrar[1]=clasar[m];}
        }

          parli.children('ul').children('li').each(function(){      //коллекция дочерних узлов узла parli
          worli = jQuery(this);                                     //перебираем коллекцию

              if(worli.hasClass(clasar[m])){
                  worli.removeClass(clasar[m]); //удаляем классы у дочерних узлов
                  woratr = worli.attr('rclas'); //получаем строку аттрибута

            if(clasar[m].indexOf('1')!=-1){//если это класс границы, записываем его на первое место
                               //выясняем состояние строки аттрибута
            if(woratr.length==0){worliatrstr = clasar[m];
            }else{worliatrstr = clasar[m] +  woratr;}

            }else{//если это класс компонента, записываем его на второе место,
          if(woratr.length==0){worliatrstr = '%' + clasar[m];
          }else{worliatrstr = woratr + '%' + clasar[m];}

            }

               //записываем новую строку в атрибут
           worli.attr('rclas',worliatrstr);
              }


          });
        }
            //записываем удаляемые классы в атрибут для узла первого уровня
        atrstr = atrar[0]+ '%' + atrar[1];
                parli.attr('rclas',atrstr);
           atrar[0]='';atrar[1]='';

    });
}
function return_Classes(){
    var parli,worli,rcl,rclar,rclen;
   jQuery('#ku0').children('li').each(function(){ //коллекция всех узлов предложения
     parli = jQuery(this);                         //узел первого порядка
          rcl=parli.attr('rclas');
       if(rcl.length>0){

           rclar = rcl.split('%');
           rclen = rclar.length;

           for (var u=0;u<rclen;u++){
             if(rclar[0])parli.addClass(rclar[0]);//в первой номере идет класс границ,
               if(rclen>1){
                   if(rclar[1]){if(rclar[1]=='1')parli.addClass('prs');}// вторым номером -  класс присоединения
                   if(rclar[2])parli.addClass(rclar[2]);// третьим номером - класс компонентов
               }
              parli.attr('rclas','');
        rclar.length=0;
         rcl = '';
           }
       }
   parli.children('ul').children('li').each(function(){      //коллекция дочерних узлов узла parli
      worli = jQuery(this);

       rcl=worli.attr('rclas');

       if(rcl.length>0){
           rclar = rcl.split('%');
           rclen = rclar.length;

           for (var u=0;u<rclar.length;u++){

               if(rclar[0]){

                   worli.addClass(rclar[0]);//в первой номере идет класс границ,
               }
               if(rclen>1){
                   if(rclar[1])worli.addClass(rclar[1]);// вторым номером - класс компонентов
                   if(rclar[2])worli.addClass('prs');// третьим номером - класс присоединения
               }


               parli.attr('rclas','');
        rclar.length=0;
         rcl = '';
           }
       }


   });
   });

}
function toggle_marks(){
    var knp = jQuery('#swbut');
    if(knp.attr('sw')=='1'){//если классы включены
        knp.attr('sw','0');
        //remove_Classes();
    }else if(knp.attr('sw')=='0'){//если классы отключены
      knp.attr('sw','1');
//return_Classes();
    }
}
function check_switcher(){
    if(jQuery('#sentence').attr('hid')!=='o'){
    var but = jQuery('#swbut');
     if(but.attr('sw')=='0'){
        check_work();
        but.attr('sw','1');
        but.html('Скрыть ошибки');
  }else{
        remove_all_Errors();
        but.attr('sw','0');
        but.html('Проверить');
    }
    }else{
        alert('Выберите тип задания');
    }
    }
function separator(){
 var parli,worli;
 jQuery('#ku0').children('li').each(function(){ 
     parli = jQuery(this);
     parli.children('ul').children('li').each(function(){
          worli = jQuery(this);

        if(worli.hasClass('prs') || worli.next().hasClass('prs')){

         if(worli.hasClass('selact')){worli.removeClass('selact');
         }else{jQuery('.selact').removeClass('selact');
             worli.addClass('selact');}
            separate_word('1');
        }
      });
     //if()
   });
}
function check_work(){
var parli,worli,clrar=[],parar=[],prov=[],tp='',zd,curt,
elmnum=0,elmerr=0,grnum=0,grerr=0,selnum=0,selerr=0,sgrnum=0,sgrerr=0;
          //zd = jQuery('sentence').attr('hid');

         if(jQuery('#elmch').attr('checked'))tp +="e";
         if(jQuery('#grpch').attr('checked'))tp +="g";
         if(jQuery('#selch').attr('checked'))tp +="s";
         if(jQuery('#sgrch').attr('checked'))tp +="r";

    jQuery('#tb_rez').children('tr').each(function(p){
       curt = jQuery(this).children('td');
       curt.eq(1).html(0);curt.eq(2).html(0);
    });

  jQuery('#ku0').children('li').each(function(){ //коллекция всех узлов предложения
      parli = jQuery(this);                         //узел первого порядка
      parli.children('ul').children('li').each(function(){      //коллекция дочерних узлов узла parli
                     worli = jQuery(this);                                     //перебираем коллекцию
       clrar.length=0;parar.length=0;prov.length=0;

      if(worli.attr('achk').length>0){
          prov = worli.attr('achk').split('#');
          clrar = prov[0].split('%');
          parar = prov[1].split('%');

 if(tp.indexOf('g')>=0){if(!worli.hasClass(clrar[0])){worli.addClass('err');grerr++;}else{grnum++;}}

 if(tp.indexOf('e')>=0){if(!worli.hasClass(clrar[1])){worli.addClass('err');elmerr++;}else{elmnum++;}}

 if(tp.indexOf('r')>=0){if(!worli.parent().parent().hasClass(parar[0])){worli.addClass('err');sgrerr++;}else{sgrnum++;}}
 
 if(tp.indexOf('s')>=0){if(!worli.parent().parent().hasClass(parar[1])){worli.addClass('err');selerr++;}else{selnum++;}}
       }
      });
  });

jQuery('#tb_rez').children('tr').each(function(p){
   curt = jQuery(this).children('td');
    
    switch (p){
    case 1:curt.eq(1).html(elmnum);curt.eq(2).html(elmerr);break;
    case 2:curt.eq(1).html(grnum);curt.eq(2).html(grerr);break;
    case 3:curt.eq(1).html(selnum);curt.eq(2).html(selerr);break;
    case 4:curt.eq(1).html(sgrnum);curt.eq(2).html(sgrerr);break;
    }
});


  }
function removeError(lid){
   jQuery('#'+ lid).removeClass('err');
   jQuery('#'+ lid).parent().parent().removeClass('err');

}
function remove_all_Errors(){
var parli,worli;
    jQuery('#ku0').children('li').each(function(){ //коллекция всех узлов предложения
          parli = jQuery(this);                         //узел первого порядка
          if(parli.hasClass('err')){parli.removeClass('err');}
             parli.children('ul').children('li').each(function(){      //коллекция дочерних узлов узла parli
                worli = jQuery(this);                                     //перебираем коллекцию
                if(worli.hasClass('err')){worli.removeClass('err');}
            });
    });
}


